package com.example.demo.javaexcel.utils;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @Author : 默苍离
 * @Create_Date : 2020/12/25/14:04
 * @Pack_name : net.yla.smartbus.core.api : JavaExcel
 * *****************************************************
 * 注释: java 获取Excel文件内容
 */

public class JavaExcel {


    /**
     * xls结尾
     *
     * @throws IOException
     * @throws ParseException
     */
    public static List xls(String filePath) throws IOException, ParseException {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

        //返回的集合
        ArrayList<ArrayList> list = new ArrayList<>();

        //创建文件输入流 "F://G201.xls"
        FileInputStream fileInput = new FileInputStream("F://G201.xls");
        //由输入流文件得到工作簿对象
        HSSFWorkbook wb = new HSSFWorkbook(fileInput);
        //获取第一个sheet
        HSSFSheet sheet = wb.getSheetAt(0);
        //获取表格内容的最后一行的行数
        int lastRowNum = sheet.getLastRowNum();
        //System.out.println(lastRowNum); (及时清理不再使用的代码段或配置信息。 好的！！！)

        //rowBegin代表要开始读取的行号，下面这个循环的作用是读取每一行内容
        for (int i = 1; i <= lastRowNum; ++i) {
            ArrayList<Object> list1 = new ArrayList<>();
            //获取每一行
            HSSFRow row = sheet.getRow(i);
            //获取每一行的最后一列的列号，即总列数
            int columnNum = row.getLastCellNum();
            // System.out.println(columnNum); (及时清理不再使用的代码段或配置信息。 好的！！！)
            for (int j = 0; j < columnNum; ++j) {

                //获取每个单元格
                HSSFCell cell = row.getCell(j);
                //对第一列日期进行特殊处理
                if (j == 0) {
                    cell.setCellType(CellType.STRING);
                    String cellValue = cell.getStringCellValue();
                    Date parse = format.parse(cellValue);
                    list1.add(parse);
                } else if (j == 1) {
                    //设置单元格类型
                    cell.setCellType(CellType.STRING);
                    String cellValue = cell.getStringCellValue();
                    list1.add(cellValue);
                } else {
                    cell.setCellType(CellType.STRING);
                    String cellValue = cell.getStringCellValue();
                    double d = Double.valueOf(cellValue);
                    list1.add(d);
                }
            }
            list.add(list1);

        }
        wb.close();
        fileInput.close();
        return list;
    }


    /**
     * xlsx结尾
     *
     * @throws IOException
     * @throws ParseException
     */
    public static List xlsx(String filePath) throws IOException, ParseException {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

        //返回的集合
        ArrayList<ArrayList> list = new ArrayList<>();

        //创建文件输入流
        FileInputStream fileInput = new FileInputStream("F://G201.xls");
        //由输入流文件得到工作簿对象
        XSSFWorkbook wb = new XSSFWorkbook(fileInput);
        //获取第一个sheet
        XSSFSheet sheet = wb.getSheetAt(0);
        //获取表格内容的最后一行的行数
        int lastRowNum = sheet.getLastRowNum();

        //rowBegin代表要开始读取的行号，下面这个循环的作用是读取每一行内容
        for (int i = 1; i <= lastRowNum; ++i) {
            ArrayList<Object> list1 = new ArrayList<>();

            //获取每一行
            XSSFRow row = sheet.getRow(i);
            //获取每一行的最后一列的列号，即总列数
            int columnNum = row.getLastCellNum();
            for (int j = 0; j < columnNum; ++j) {
                //获取每个单元格
                XSSFCell cell = row.getCell(j);
                //对第一列日期进行特殊处理
                if (j == 0) {
                    cell.setCellType(CellType.STRING);
                    String cellValue = cell.getStringCellValue();
                    Date parse = format.parse(cellValue);
                    list1.add(parse);
                } else if (j == 1) {
                    //设置单元格类型
                    cell.setCellType(CellType.STRING);
                    String cellValue = cell.getStringCellValue();
                    list1.add(cellValue);
                } else {
                    cell.setCellType(CellType.STRING);
                    String cellValue = cell.getStringCellValue();
                    Integer integer = Integer.valueOf(cellValue);
                    list1.add(integer);
                }
            }
            list.add(list1);

            wb.close();
            fileInput.close();

        }
        return list;
    }


    /**
     * xls结尾 读取 文件上传的 内容
     *
     * @throws IOException
     * @throws ParseException
     */
    public static List xls(InputStream inputStream) throws IOException, ParseException {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

        //返回的集合
        ArrayList<ArrayList> list = new ArrayList<>();

//        //创建文件输入流 "F://G201.xls"
//        FileInputStream fileInput = new FileInputStream("F://G201.xls");
        //由输入流文件得到工作簿对象
        HSSFWorkbook wb = new HSSFWorkbook(inputStream);
        //获取第一个sheet
        HSSFSheet sheet = wb.getSheetAt(0);
        //获取表格内容的最后一行的行数
        int lastRowNum = sheet.getLastRowNum();
        //System.out.println(lastRowNum); (及时清理不再使用的代码段或配置信息。 好的！！！)

        //rowBegin代表要开始读取的行号，下面这个循环的作用是读取每一行内容
        for (int i = 1; i <= lastRowNum; ++i) {
            System.out.println(i);
            ArrayList<Object> list1 = new ArrayList<>();
            //获取每一行
            HSSFRow row = sheet.getRow(i);
            //获取每一行的最后一列的列号，即总列数
            int columnNum = row.getLastCellNum();
            //  System.out.println(columnNum);
            // System.out.println(columnNum); (及时清理不再使用的代码段或配置信息。 好的！！！)
            for (int j = 0; j < columnNum; ++j) {

                //获取每个单元格
                HSSFCell cell = row.getCell(j);
                //对第一列日期进行特殊处理
                if (j == 0) {
                    cell.setCellType(CellType.STRING);
                    String cellValue = cell.getStringCellValue();
                    Date parse = format.parse(cellValue);
                    list1.add(parse);
                } else if (j == 1) {
                    //设置单元格类型
                    cell.setCellType(CellType.STRING);
                    String cellValue = cell.getStringCellValue();
                    list1.add(cellValue);
                } else {
                    cell.setCellType(CellType.STRING);
                    String cellValue = cell.getStringCellValue();
                    double d = Double.valueOf(cellValue);
                    list1.add(d);
                }
            }
            list.add(list1);

        }
        wb.close();
        return list;
    }

}
